import pyautogui
import pyperclip
import time
import tkinter as tk
from tkinter import messagebox


def get_baijiaxing():
    """
    获取《百家姓》内容并分割为单个姓氏。
    :return: 姓氏列表
    """
    baijiaxing = "赵钱孙李 周吴郑王 冯陈褚卫 蒋沈韩杨 朱秦尤许 何吕施张 孔曹严华 金魏陶姜 戚谢邹喻 柏水窦章 云苏潘葛 奚范彭郎 鲁韦昌马 苗凤花方 俞任袁柳 酆鲍史唐 费廉岑薛 雷贺倪汤 滕殷罗毕 郝邬安常 乐于时傅 皮卞齐康 伍余元卜 顾孟平黄 和穆萧尹 姚邵湛汪 祁毛禹狄 米贝明臧 计伏成戴 谈宋茅庞 熊纪舒屈 项祝董梁 杜阮蓝闵 席季麻强 贾路娄危 江童颜郭 梅盛林刁 钟徐邱骆 高夏蔡田 樊胡凌霍 虞万支柯 昝管卢莫 经房裘缪 干解应宗 丁宣贲邓 郁单杭洪 包诸左石 崔吉钮龚 程嵇邢滑 裴陆荣翁 荀羊於惠 甄麹家封 芮羿储靳 汲邴糜松 井段富巫 乌焦巴弓 牧隗山谷 车侯宓蓬 全郗班仰 秋仲伊宫 宁仇栾暴 甘钭厉戎 祖武符刘 景詹束龙 叶幸司韶 郜黎蓟薄 印宿白怀 蒲台从鄂 索咸籍赖 卓蔺屠蒙 池乔阴郁 胥能苍双 闻莘党翟 谭贡劳逄 姬申扶堵 冉宰郦雍 却璩桑桂 濮牛寿通 边扈燕冀 郏浦尚农 温别庄晏 柴瞿阎充 慕连茹习 宦艾鱼容 向古易慎 戈廖庚终 暨居衡步 都耿满弘 匡国文寇 广禄阙东 殴殳沃利 蔚越夔隆 师巩厍聂 晁勾敖融 冷訾辛阚 那简饶空 曾毋沙乜 养鞠须丰 巢关蒯相 查后荆红 游竺权逯 盖益桓公"
    return baijiaxing.split(" ")


def paste_and_send(msg):
    """
    模拟复制粘贴并发送消息。
    :param msg: 要发送的消息
    """
    try:
        # 复制消息到剪贴板
        pyperclip.copy(msg)
        # 模拟键盘 Ctrl + V 粘贴内容
        pyautogui.hotkey('ctrl', 'v')
        # 模拟按下 Enter 键发送消息
        pyautogui.press('enter')
        print(f"已发送姓氏: {msg}")
    except Exception as e:
        print(f"发送姓氏失败: {e}")


def open_wechat_and_search_friend(friend_name):
    """
    打开微信并搜索好友。
    :param friend_name: 好友昵称
    """
    try:
        # 打开微信 (Ctrl + Alt + W)
        pyautogui.hotkey('ctrl', 'alt', 'w')
        time.sleep(1)  # 等待微信启动
        # 搜索好友 (Ctrl + F)
        pyautogui.hotkey('ctrl', 'f')
        # 将好友昵称复制到剪贴板
        pyperclip.copy(friend_name)
        # 模拟键盘 Ctrl + V 粘贴好友昵称
        pyautogui.hotkey('ctrl', 'v')
        time.sleep(1)  # 等待搜索结果加载
        # 回车进入好友消息界面
        pyautogui.press('enter')
        print(f"已进入好友 {friend_name} 的聊天界面")
    except Exception as e:
        print(f"打开微信或搜索好友失败: {e}")


def send_messages_to_friend(friend_name, interval=1):
    """
    向指定好友发送《百家姓》的姓氏。
    :param friend_name: 好友昵称
    :param interval: 每条消息之间的间隔时间（秒）
    """
    try:
        # 打开微信并搜索好友
        open_wechat_and_search_friend(friend_name)
        # 获取《百家姓》姓氏列表
        surnames = get_baijiaxing()
        # 遍历姓氏列表并逐条发送
        for surname in surnames:
            paste_and_send(surname)
            time.sleep(interval)  # 每条消息之间等待指定的时间
        print(f"所有姓氏已发送给好友 {friend_name}")
        messagebox.showinfo("完成", f"所有姓氏已发送给好友 {friend_name}")
    except Exception as e:
        print(f"发送过程中出现错误: {e}")
        messagebox.showerror("错误", f"发送过程中出现错误: {e}")


def start_sending():
    """
    开始发送消息的回调函数。
    """
    friend_name = entry.get().strip()
    if not friend_name:
        messagebox.showwarning("警告", "请输入好友昵称！")
        return

    try:
        interval = float(interval_entry.get().strip())
        if interval <= 0:
            raise ValueError
    except ValueError:
        messagebox.showwarning("警告", "请输入有效的发送间隔时间（秒）！")
        return

    # 禁用按钮，防止重复点击
    send_button.config(state=tk.DISABLED)
    # 开始发送消息
    send_messages_to_friend(friend_name, interval)
    # 发送完成后重新启用按钮
    send_button.config(state=tk.NORMAL)


# 创建主窗口
root = tk.Tk()
root.title("自动发送《百家姓》工具")

# 设置窗口大小
root.geometry("400x200")

# 标签：好友昵称
tk.Label(root, text="好友昵称:").pack(pady=5)

# 输入框：好友昵称
entry = tk.Entry(root, width=30)
entry.pack(pady=5)

# 标签：发送间隔时间
tk.Label(root, text="发送间隔时间（秒）:").pack(pady=5)

# 输入框：发送间隔时间
interval_entry = tk.Entry(root, width=10)
interval_entry.insert(0, "1")  # 默认值为 1 秒
interval_entry.pack(pady=5)

# 按钮：开始发送
send_button = tk.Button(root, text="开始发送", command=start_sending)
send_button.pack(pady=20)

# 运行主循环
root.mainloop()
